#pragma once

#include "interface/common.h"

// 计算点到直线的垂直距离
float perpendicularDistance(const Point& pt, const Point& lineStart, const Point& lineEnd);

// 递归实现Douglas-Peucker算法
void simplifySegment(const std::vector<Point>& points, size_t startIdx, size_t endIdx, float epsilon,
                     std::vector<bool>& keepFlags);

// 主简化函数
std::vector<Point> douglasPeucker(const std::vector<Point>& points, float epsilon);

// 计算方向向量（考虑端点边界情况）
std::vector<Point> computeDirections(const std::vector<Point>& path);

// 生成三阶贝塞尔控制点（k为曲率系数）
void generateControlPoints(const std::vector<Point>& path, const std::vector<Point>& directions,
                           std::vector<Point>& outCtrl, std::vector<Point>& inCtrl, float curvature = 0.25);

// 三阶贝塞尔曲线生成器
std::vector<Point> cubicBezier(const Point& p0, const Point& p1, const Point& p2, const Point& p3, int segments = 20);

// 路径平滑主函数
std::vector<Point> smoothPath(const std::vector<Point>& path, float curvature = 0.25, int segments = 20);
